using System.Collections;
using System.Collections.Generic;
using UnityEngine; 
///<summary>
///对象池结构：
// 使用单链表结构管理空闲对象 
//     _First 是静态变量，指向链表头部（第一个可用对象）
// 每个对象的 Next 属性指向链表中的下一个可用对象 
///</summary>
class AssetLoader
{
    #region pool
    static AssetLoader _First;
    AssetLoader Next;
    public static AssetLoader Malloc()
    {
        var t = _First ?? new AssetLoader();
        _First = _First?.Next;
        return t;
    }
    public void Free()
    {
        Next = _First;
        _First = this;
    }
    #endregion
}
public class TestPool : MonoBehaviour
{
    void Start()
    {
        // var a1 = AssetLoader.Malloc();
        // var a2 = AssetLoader.Malloc();
        // var a3 = AssetLoader.Malloc();
        // a1.Free();
        // a2.Free();
        // a3.Free();
        // var a4 = AssetLoader.Malloc();
        // var a5 = AssetLoader.Malloc();
        // var a6 = AssetLoader.Malloc();
        // Debug.Log(a4 == a3);
        // Debug.Log(a5 == a2);
        // Debug.Log(a6 == a1);
        
        var a1 = AssetLoader.Malloc();
        a1.Free();
        var a4 = AssetLoader.Malloc();
        Debug.Log(a4 == a1);
    }

    void Update()
    {
        
    }
}
